perm filename MATCH.LSP[W82,JMC] blob
sn#638802 filedate 1982-01-29 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 match.lsp[w82,jmc] ekl axioms and proof about match and sublisq
C00010 ENDMK
C⊗;
;;; match.lsp[w82,jmc] ekl axioms and proof about match and sublisq
(wipe-out)
(get-proofs lispax)
(proof match)
(context lispax#1:*)
(decl (pat exp) ground)
(decl (NO QUOTE LOSE) ground constant sexp)
(decl (match) |ground⊗ground⊗ground → ground| constant)
(axiom |∀pat exp. match(pat, exp, NO) = NO|)
(lname definfo)
(axiom |∀ pat exp alist. match(pat,exp,alist) =
if atom pat then
(λa1.if null a1 then (pat~exp)~alist
else if cdr car a1 = exp then alist
else NO)
(assoc(pat,alist))
else if car pat = QUOTE then (if car cdr pat = exp then alist else NO)
else if atom exp then NO
else match(car pat, car exp, match(cdr pat, cdr exp, alist))|)
(lname definfo)
(decl sublisq |ground⊗ground → ground| constant)
(axiom |∀ pat alist. sublisq(pat, alist) =
if atom pat then (λu.if null u then LOSE else cdr u)(assoc(pat,alist))
else if car pat = QUOTE then car cdr pat
else sublisq(car pat, alist) ~ sublisq(cdr pat, alist)|)
(lname definfo)
(decl matchp |ground⊗ground⊗ground → truthval|)
(axiom |∀pat exp alist.matchp(pat,exp,alist) ≡
if atom pat then
(λa1. null a1 ∨ cdr cdr a1 = exp)(assoc(pat,alist))
else if car pat = QUOTE then (car cdr pat = exp)
else ¬atom exp ∧ matchp(cdr pat, cdr exp, alist)
∧ matchp(car pat, car exp, match(cdr pat, cdr exp, alist))|)
(lname definfo)
(∀e phi |λpat.∀exp alist.match(pat, exp, alist) ≠ NO
⊃ sublisq(pat, match(pat, exp, alist)) = exp| lispax#sexpinduction nil)
(assume |match(pat, exp, alist) ≠ NO|)
(rw 12 |nil*$definfo*nil**simpinfo**sortinfo*nil| sortinfo)